package com.jsu.collegestudentadmissionsystem;

import com.jsu.collegestudentadmissionsystem.controller.AcademyController;
import com.jsu.collegestudentadmissionsystem.controller.AdministratorController;
import com.jsu.collegestudentadmissionsystem.controller.StudentController;
import com.jsu.collegestudentadmissionsystem.utils.AcquireStatus;
import com.jsu.collegestudentadmissionsystem.utils.TipsStentes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Scanner;


@Component
public class CommandDispatich {

    @Autowired
    StudentController studentController;

    @Autowired
    AcademyController academyController;

    @Autowired
    AdministratorController administratorController;

    @Autowired
    AcquireStatus acquireStatus;
    Scanner sc = new Scanner(System.in);
    public void run(){
        //先让用户选择身份，再根据身份展示不同的可执行命令
        handlePre();
        // para1 操作序号   para2 操作所需参数
        while(true){
            System.out.println(
                    "1、   管理员     2、院校操作人员    3、学生    4.退出\n\n" +
                    "请选择身份或操作："
            );

            int cmd = sc.nextInt();
            if (cmd == 4) {
                System.out.println("bye");
                break;
            }
            identityDispatch(cmd);
        }


    }



    private void identityDispatch(int identity) {
        switch (identity){
            case 1 :
                administratorTips(identity);
                break;
            case 2:
                academyTips(identity);
                break;
            case 3 :
                studentTips(identity);
                break;
            default:
                break;
        }
    }


    private void studentTips(int identity) {
        while (true){
            System.out.println("学生列表\n学号 姓名");
            studentController.dispatch(0);
            Integer flag = 0;
            if(flag==0){
                System.out.println("请输入需要操作的学生的学号，如需返回上一步请输入0:");

                Integer stuNum = sc.nextInt();

                if(stuNum==0) break;
                studentController.setStudentId(stuNum);
                flag++;
            }
            while(true){
                System.out.println(TipsStentes.getStatusTips().get(identity).get(acquireStatus.getStatus()));
                Scanner in = new Scanner(System.in);
                Integer operation = in.nextInt();

                if(operation==0) break;
                studentController.dispatch(operation);
            }
        }
    }

    private void academyTips(int identity) {
        while (true) {
            Integer preStatus = acquireStatus.getStatus();
            System.out.println(preStatus);
            System.out.println(TipsStentes.getStatusTips().get(identity).get(preStatus));
            System.out.println("请输入一个序号来选择你要进行的操作");

            Integer operation = sc.nextInt();

            if(TipsStentes.getTips().get(identity).get(operation)!=null){
                System.out.println(TipsStentes.getTips().get(identity).get(operation));
            }

            if(preStatus.equals(acquireStatus.getStatus())){
                if (operation == 0) {
                    break;
                }
                academyController.dispatch(operation);
            }else{
                System.out.println("当前阶段已经改变请刷新");
            }
        }
    }
    private void administratorTips(int identity) {
        while (true){
            System.out.println("管理员大哥你好");

            Integer preStatus = acquireStatus.getStatus();
            System.out.println(TipsStentes.getStatusTips().get(identity).get(preStatus));

            System.out.println("请输入一个序号来选择你要进行的操作");
            Integer operation = sc.nextInt();

            if(TipsStentes.getTips().get(identity).get(operation)!=null){
                System.out.println(TipsStentes.getTips().get(identity).get(operation));
            }
            if(preStatus.equals(acquireStatus.getStatus())){
                if (operation == 0) {
                    break;
                }
                administratorController.dispatch(operation);
            }else{
                System.out.println("当前阶段已经改变请刷新");
            }
        }
    }

    private void handlePre() {
        TipsStentes tipsStentes = new TipsStentes();

        //管理员操作初始化
        HashMap<Integer,String> adminStatusHashMap = new HashMap<>();
        adminStatusHashMap.put(1,"管理员可进行的操作：\n" +
                "1、增加学生信息(必选)    2、删除学生信息   3、修改学生信息   4、查看学生信息\n" +
                "5、增加院校信息(必选)    6、删除院校信息   7、修改院校信息   8、查看院校信息    10、修改状态    0.退出\n");
        adminStatusHashMap.put(2,  "管理员可进行的操作：\n" +
                "9、设置学生的考试成绩(必选) 10、修改状态 0.退出\n\n");
        adminStatusHashMap.put(3,            "管理员可进行的操作：\n" +
                "10、修改状态 0.退出\n\n" );

        //学院操作初始化
        HashMap<Integer,String> academyStatusHashMap = new HashMap<>();
        academyStatusHashMap.put(1,  "院校可进行的操作: \n" +
                "1、增加开设专业信息(必选)    2、删除开设专业信息   3、修改开设专业信息   4、查看各批次院校开设专业信息   0.退出\n\n");
        academyStatusHashMap.put(2,            "院校可进行的操作: \n" +
                "4、查看各批次院校开设专业信息      5、进行择优录取(必选)  0.退出\n\n");
        academyStatusHashMap.put(3,            "院校可进行的操作: \n" +
                "6、查看院校录取情况 0.退出\n\n");

        //学生初始化操作
        HashMap<Integer,String> studentStatusHashMap = new HashMap<>();
        studentStatusHashMap.put(1,            "操作表: \n" +
                "0、返回上一步    1、查看个人信息    2、编辑个人信息   3、选择考试科目(必选)");
        studentStatusHashMap.put(2,            "操作表: \n" +
                "0、返回上一步   4、查看考试成绩及排名    5、查看院校信息    6、查看本人志愿    7、填报志愿(必选)    8、修改志愿    9、删除志愿" );
        studentStatusHashMap.put(3,            "操作表: \n" +
                "0、返回上一步    10、查看个人录取情况" );
        TipsStentes.getStatusTips().put(1,adminStatusHashMap);
        TipsStentes.getStatusTips().put(2,academyStatusHashMap);
        TipsStentes.getStatusTips().put(3,studentStatusHashMap);

        //Tips中加入院校的操作
        HashMap<Integer,String > academyHashMap = new HashMap<>();
        academyHashMap.put(1,"请输入学校名字     专业      录取批次    录取人数" +
                "               提示：批次请输入 本科一批、本科二批、专科一批、专科二批其中一种，各自段按空格分开");
        TipsStentes.getTips().put(2,academyHashMap);

        //Tips中加入学生的操作

        HashMap<Integer,String > studentHashMap = new HashMap<>();
        TipsStentes.getTips().put(3,studentHashMap);

        //Tips中加入管理员操作
        HashMap<Integer,String > adminHashMap = new HashMap<>();
        TipsStentes.getTips().put(1,adminHashMap);
    }


}